package com.cn.api.util; /**
 * @author: yihanyuan
 * @Description：
 * @Date: 2019/3/12 13:07
 */

import org.junit.Test;

import java.util.ArrayList;
import java.util.List;

/**
 * @program: demo
 * @description: 多元一次方程
 * @author: yihanyuan
 * @create: 2019-03-12 13:07
 **/
public class Test2 {
    @Test
    public void test2() {
        List list1 = new ArrayList<>();
        list1.add("0");
        list1.add("1");
        List list2 = new ArrayList<>();
        list2.add("0");
        list2.add("1");
        List list3 = new ArrayList<>();
        list3.add("0");
        list3.add("1");
        List list4 = new ArrayList<>();
        list4.add("0");
        list4.add("1");
//        for (int i = 0; i < list1.size(); i++) {
//            for (int j = 0; j < list2.size(); j++) {
//                for (int k = 0; k < list3.size(); k++) {
//                    for (int l = 0; l < list4.size(); l++) {
//                        System.out.println(list1.get(i).toString() + list2.get(j).toString() + list3.get(k).toString() + list4.get(l).toString());
//                    }
//                }
//            }
//        }
        List<List<String>> lists = new ArrayList<>();
        lists.add(list1);
        lists.add(list2);
        lists.add(list3);
        lists.add(list4);
//        testMethod(lists, "", )
    }

    public List testMethod(List<List<String>> list, String str, int i, List result) {
        List<String> l = list.get(i);
        for (String string : l) {
            String str2 = str + string;
            if (i != list.size() - 1) {
                int j = i + 1;
                testMethod(list, str2, j, result);
            } else {
                result.add(str2);
            }
        }
        return result;
    }

//
//    void cycle(int sCnt, int zCnt) {
//        return;
//        sCnt--;
//        if (sCnt == 0 && zCnt == 0) {
//            return;
//        }
//
//        //for(int i=0;i<10;i++)
//        {
//            TRACE("%d\n", sCnt);
//        }
//
//        cycle(sCnt, zCnt);
//    }
//
//    void func(int depth, int n)
//
//    {
//
//        int cur = 0;
//
//        //int *tab = (int *)malloc(n * sizeof(int));
//        int tab[20]={0} ;//tab[0]最外层，tab[1]次外层
//        for (*tab = 0;cur >= 0; ){
//        ++tab[cur];
//        //if (tab[cur] <= n) {
//        if (tab[cur] <= iii[cur]) {//如果tab[cur]层的循环次数小于该层规定的最大次数
//            if (cur == depth - 1) {//如果该层是最内层
//                int i;
//                for (i = 0; i < depth; ++i) {
//                    //TRACE("%d ", tab[i]);
//                    //iii[i] = i;
//                }
//                TRACE("%d,%d,%d,%d,%d,%d,%d\n", tab[0], tab[1], tab[2], tab[3], tab[4], tab[5], tab[6]);
//                //TRACE("%d,%d,%d,%d,%d,%d,\n",
//                //	iii[0],iii[1],iii[2],iii[3],iii[4],iii[5]);
//            } else {
//                ++cur;
//                tab[cur] = 0;
//            }
//        } else {
//            --cur;
//        }
//    }
//    }

    public static String multiRound(List<List<String>> dataList, String temp, int index) {
        if (index >= dataList.size()) {
            return "";
        }
        StringBuffer out = new StringBuffer();
        String tmp = "";
        //取出第一个list
        List<String> data = dataList.get(index);
        //对第一个list进行遍历
        for (int i = 0; i < data.size(); i++) {
            tmp = data.get(i) + "/";
            if (index < dataList.size()) {
//取出第一个list中的参数进行拼接，进入下面的循环，取出第二个list，以此继续循环至最后一个list中的最后一个参数，然后再取出第二个参数，继续循环
                out.append(multiRound(dataList, temp + tmp, index + 1));
//                out.append(multiRound(dataList, temp + "  " + index, index + 1));
            }
            if (index == dataList.size() - 1) {
                out.append(temp).append(tmp).append("\n");
            }
        }
        return out.toString();
    }

    public static void main(String[] args) {
        List<List<String>> dataList = new ArrayList<List<String>>();
        List<String> aaa = new ArrayList<String>();
        aaa.add("111");
        aaa.add("222");
        aaa.add("333");
        dataList.add(aaa);
        aaa = new ArrayList<String>();
        aaa.add("aaa");
        aaa.add("bbb");
        aaa.add("ccc");
        aaa.add("ddd");
        dataList.add(aaa);
        aaa = new ArrayList<String>();
        aaa.add("+++");
        aaa.add("---");
        aaa.add("...");
        dataList.add(aaa);
        System.out.println(multiRound(dataList, "", 0));
    }
}